// 和`if let`类似，`while let`也可以把别扭的`match`改写得优雅一些

fn main() {
    // 将 `optional` 设为 `Option<i32>` 类型
    let mut optional = Some(0);

    // 读作：当`let` 将 `optional` 解构成 `Some(i)`时，就
    // 执行语句块 `{}`，否则就 `break`
    while let Some(i) = optional {
        if i > 9 {
            println!("> 9, quit");
            optional = None;
        } else {
            println!("`i` is {:?}, try again", i);
            optional = Some(i+1);
        }
        // 比`match`使用的缩进更少，并且不会显示地处理失败情况
    }
    // `if let` 有可选的`else`, `else if`分句，
    // 而`while let` 没有
}
